package main

import "fmt"

// 给定切片 sl，将一个 []byte 数组追加到 sl 后面。写一个函数 Append(slice, data []byte) []byte，该函数在 sl 不能存储更多数据的时候自动扩容。

func Append(sl, data []byte) (res []byte) {
	len_sl := len(sl)
	len_data := len(data)
	len_max := len_sl + len_data
	// 判断sl原容量, 小于目标时自动扩容
	if cap(sl) < len_max {
		res = make([]byte, len_max)
		copy(res[0:len_sl], sl)
	} else {
		res = sl[:len_max]
	}
	copy(res[len_sl:], data)
	return
}

func main() {
	sli := make([]byte, 3, 6)
	copy(sli, []byte{'a', 'b', 'c'})
	slice := Append(sli, []byte{'e', 'd'})
	// 此时原slice被修改, 未扩容
	fmt.Println("sli: ", sli[:5])
	fmt.Println("sli after append: ", slice)
	slice2 := Append(slice, []byte{'g', 'h'})
	fmt.Println("sli: ", sli[:6])
	fmt.Println("slice after append: ", slice2)

}
